A network element (such as a router or switch) transmits and receives network data using one or more ports of that network element. Each port on the network element has a physical link speed that limits the rate at which network data can be transmitted from that port. The network element uses one or more queues to store the network data that is to be transmitted from one of the ports of the network element. The maximum data that a queue stores is determined by the available buffer memory and a buffer configuration for the queue.
When the amount of network data that is to be transmitted by one of the ports on a network element, or the overall data transmitted by a network element, is greater than the port or network element can handle within a given period, network congestion can occur, resulting in increased latency for network data propagation through the nodes on the network. Network congestion, as well as output port contention, can cause a secondary performance limiting effect known as head of line blocking.
Head of line blocking within a store-and-forward network element results when network data units (e.g., packets, frames, etc.) in a first-in first-out (FIFO) buffer on an input port of the network element are held up by the first packet in the buffer, for example, due to output buffer congestion or output port contention. This is particularly true if the blocked network data units are meant to go to an uncongested port and are blocked by packets going to a congested port. Under some circumstances, head of line blocking can significantly reduce network element throughput under heavy network traffic conditions.